package com.chenjt.jvm.second.five_classLoader;

/**
 * 注释：
 *
 * @author chenjt
 * @date 2025/7/3 8:55
 */
public class ClassLoaderTest1 {

    public static void main(String[] args) {
        // 获取系统该类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        // sun.misc.Launcher$AppClassLoader@18b4aac2
        System.out.println(systemClassLoader);

        // 获取扩展类加载器
        ClassLoader extClassLoader = systemClassLoader.getParent();
        // sun.misc.Launcher$ExtClassLoader@1b6d3586
        System.out.println(extClassLoader);

        // 试图获取引导类加载器：失败
        ClassLoader bootstrapClassLoader = extClassLoader.getParent();
        System.out.println(bootstrapClassLoader);// null


        // ####################################
        try {

            ClassLoader classLoader = Class.forName("java.lang.String").getClassLoader();
            System.out.println(classLoader);// null

            // 自定义的类默认使用系统类加载器
            ClassLoader classLoader1 = Class.forName("com.chenjt.jvm.second.five_classLoader.ClassLoaderTest1").getClassLoader();
            // sun.misc.Launcher$AppClassLoader@18b4aac2
            System.out.println(classLoader1);

            // 关于数组类型的加载：使用的类的加载器与数组元素的类的加载器相同
            String[] arrStr = new String[10];
            // null：表示使用的是引导类加载器
            System.out.println(arrStr.getClass().getClassLoader());

            ClassLoaderTest1[] arr1 = new ClassLoaderTest1[10];
            // sun.misc.Launcher$AppClassLoader@18b4aac2
            System.out.println(arr1.getClass().getClassLoader());

            int[] arr2 = new int[10];
            // null：不需要类的加载器
            System.out.println(arr2.getClass().getClassLoader());


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

}
